package com.spring.dynamicdatasource.service;

import com.spring.dynamicdatasource.dto.ConnectionDTO;

import javax.servlet.http.HttpSession;
import javax.sql.DataSource;

/**
 * 数据源的一些操作
 *
 * @author HouKunLin
 * @date 2019/9/10 0010 11:48
 */
public interface DataSourceService {
    /**
     * 注册一个数据源
     *
     * @param dto 数据库连接信息
     * @return 一个能够正常使用的数据源
     * @throws Exception
     */
    DataSource registerDateSource(ConnectionDTO dto) throws Exception;

    /**
     * 注册一个数据源
     *
     * @param dataSource 数据源
     * @return
     */
    DataSource registerDateSource(DataSource dataSource);

    /**
     * 移除一个数据源
     *
     * @param dataSource 需要移除的数据源
     */
    void removeDataSource(DataSource dataSource);

    /**
     * 移除一个数据源
     *
     * @param key 数据源对应的KEY
     */
    void removeDataSource(String key);

    /**
     * 移除一个会话绑定的数据源信息
     *
     * @param session 会话
     */
    void removeDataSource(HttpSession session);

    /**
     * 根据数据库连接信息创建数据库连接URL
     *
     * @param dto 数据库连接信息
     * @return Jdbc Url
     * @throws Exception
     */
    String getJdbcUrl(ConnectionDTO dto) throws Exception;
}
